package com.lzh.tiktok.user.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lzh.common.utils.JwtUtils;
import com.lzh.tiktok.user.dao.MessageDao;
import com.lzh.tiktok.user.dao.UserDao;
import com.lzh.tiktok.user.entity.MessageEntity;
import com.lzh.tiktok.user.entity.UserEntity;
import com.lzh.tiktok.user.service.MessageService;
import com.lzh.tiktok.user.service.UserService;
import com.lzh.tiktok.user.vo.MessageResponseVo;
import com.lzh.tiktok.user.vo.MessageVo;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author lizhihang
 * @create 2023-01-29 14:14
 */
@Service("messageService")
public class MessageServiceImpl extends ServiceImpl<MessageDao, MessageEntity> implements MessageService {
    /**
     * 在好友列表点击任意用户，进入详细聊天页面
     * 在该页面下会定时轮询调用这个查询消息的接口，获取最新消息列表。
     *
     * @param to_user_id 对方用户id
     * @param token      用户鉴权token
     * @return
     */
    @Override
    public MessageResponseVo chatRecords(String to_user_id, String token) {
        MessageResponseVo messageResponseVo = new MessageResponseVo();
        //当前登录的用户id
        Long userId = JwtUtils.getUserId(token);

        //获取到所有的聊天记录
        List<MessageEntity> messageEntitys = this.baseMapper.selectAllMessage(to_user_id, userId);
        List<MessageVo> collect = messageEntitys.stream().map(messageEntity -> {
            MessageVo messageVo = new MessageVo();
            messageVo.setId(messageEntity.getMessageId().intValue());
            messageVo.setContent(messageEntity.getMessage());
            messageVo.setFrom_user_id(messageEntity.getFromUserId());
            messageVo.setTo_user_id(messageEntity.getToUserId());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = simpleDateFormat.format(messageEntity.getCreateTime());
            messageVo.setCreate_time(format);
            return messageVo;
        }).collect(Collectors.toList());
        messageResponseVo.setMessage_list(collect);
        messageResponseVo.setStatus_code(0);
        messageResponseVo.setStatus_msg("返回聊天记录成功");
        return messageResponseVo;
    }

    /**
     * @param to_user_id
     * @param token
     * @param content
     * @return
     */
    @Override
    public Boolean sendMessage(String to_user_id, String token, String content) {
        //向消息表中插入一条数据
        MessageEntity message = new MessageEntity();
        //自己的userId
        Long userId = JwtUtils.getUserId(token);
        message.setToUserId(Integer.valueOf(to_user_id));
        message.setFromUserId(userId.intValue());
        message.setMessage(content);
        //Mp自动填充时间为当前时间
        boolean save = this.save(message);
        return save;
    }

}
